package com.coolingme.pay;

/**
 * 抽象支付策略，同时应用了模板模式
 *
 * @author wangyue
 * @date 2020-09-22 22:54
 */
public abstract class Payment {

    /**
     * 支付类型名称
     *
     * @return 支付类型名称
     */
    public abstract String getName();

    /**
     * 规定了支付的模板
     *
     * @param userId 用户id
     * @param money  金额
     * @return 支付结果
     */
    public String pay(String userId, double money) {
        if (queryBalance(userId) < money) {
            return "对不起，" + getName() + "余额不足";
        }
        return getName() + "成功支付" + money + "元";
    }

    /**
     * 查询余额
     *
     * @param userId 用户id
     * @return 余额
     */
    protected abstract double queryBalance(String userId);


}
